package demo22;

import java.util.Arrays;

public class bubble {
    //冒泡排序
    public static void main(String[]args){
        int []array={3,5,1,2,7,0,4,5,3,7,9,8};
        System.out.println("排序前的数组:");
        System.out.println(Arrays.toString(array));
        bubbleWay(array);
        System.out.println("排序后的数组:");
        System.out.println(Arrays.toString(array));
        System.out.println();
        int[] array2={3,8,9,1,2,5,6,0,45,23};
        System.out.println("排序前的数组:");
        System.out.println(Arrays.toString(array2));
        bubbleWay2(array2);
        System.out.println("优化后排序后的数组:");
        System.out.println(Arrays.toString(array2));

    }
    //未优化后的冒泡排序
    public static void bubbleWay(int[]array){
        for(int i=0;i<array.length-1;i++){//需要比较的轮数
            for(int j=0;j<array.length-1-i;j++){//每轮需要比较的趟数
                if(array[j]>array[j+1]){
                    swap(array,j,j+1);
                }
            }
        }
    }
    public static void swap(int[]array,int i,int j){
        int temp=array[i];
        array[i]=array[j];
        array[j]=temp;
    }
    //优化冒泡排序
    public static void bubbleWay2(int []array){

        for(int i=0;i< array.length-1;i++){
            boolean flag=false;
            for(int j=0;j< array.length-1-i;j++){
                if(array[j]>array[j+1]){
                    swap(array,j,j+1);
                    flag=true;
                }

            }
            if(flag==false){
                break;//用于判断如果flag未被改变，说明已经有序，不需要再比较，直接跳出循环
            }
        }
    }
}
